#if !defined(_APP_BUFFER)
#define _APP_BUFFER
#include <pthread.h>
/**
 * 小缓冲区
 * 缓冲区  1）空间指针  2）空间总大小  3）当前存储的数据长度
 */
typedef struct 
{
   char *ptr;
   int  total_size;
   int  len;
} SubBuffer;

/**
 * 大缓冲区
 * 1）两个小缓存区的数组 2）读缓冲的数组下标 写缓冲的数组下标 （读写标识） 3）锁
 */
typedef struct 
{
   SubBuffer *sub_buffers[2];
   int  read_index;
   int  write_index;
   pthread_mutex_t read_lock;
   pthread_mutex_t swap_lock;
} Buffer;

/**
 * 初始化缓冲区 
 * @param 其中一份缓冲区的大小 实际双缓冲 会占用total_size*2的空间
 */

Buffer *app_buffer_init(int total_size);

/**
 *  向缓冲区写入
 *
 */
int app_buffer_write(Buffer *buffer ,char *write_data,int write_len);

/**
 *  从缓冲区读取
 *  @param 1 缓冲区 2 写入的目标空间(已分配空间) ,3 可用空间 
 * @return 最终实际读取的数据量
 */
int app_buffer_read(Buffer *buffer ,char *read_buff,int read_buff_size);

/**
 * i释放缓冲u区
 */
void  app_buffer_free(Buffer *buffer);

#endif // _APP_BUFFER
